/*
 * Copyright 2017-2022 original authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.micronaut.expressions.parser.token;

import io.micronaut.core.annotation.Internal;

/**
 * List of supported token types.
 *
 * @author Sergey Gavrilov
 * @since 4.0.0
 */
@Internal
public enum TokenType {
    WHITESPACE,
    IDENTIFIER,
    BEAN_CONTEXT,
    ENVIRONMENT,
    THIS,
    TYPE_IDENTIFIER,
    EXPRESSION_CONTEXT_REF,
    DOT,
    SAFE_NAV,

    ELVIS,
    COMMA,
    COLON,
    L_PAREN,
    R_PAREN,
    L_CURLY,
    R_CURLY,
    L_SQUARE,
    R_SQUARE,
    QMARK,
    NOT,

    // MATH OPERATORS
    POW,
    PLUS,
    MINUS,
    MUL,
    DIV,
    MOD,
    INCREMENT,
    DECREMENT,

    // LITERALS
    DOUBLE,
    FLOAT,
    INT,
    LONG,
    STRING,
    BOOL,
    NULL,

    // LOGICAL OPERATORS
    OR,
    AND,

    // RELATIONAL OPERATORS
    EQ,
    NE,
    GT,
    GTE,
    LT,
    LTE,
    INSTANCEOF,
    MATCHES,

    EMPTY;

    public boolean isOneOf(TokenType... others) {
        for (TokenType comparedType: others) {
            if (comparedType == this) {
                return true;
            }
        }
        return false;
    }
}
